package cyc2018.双指针;

/**
 * 平方数之和
 * 给定一个非负整数 c ，你要判断是否存在两个整数 a 和 b，使得 a2 + b2 = c。
 *
 * 示例1:
 *
 * 输入: 5
 * 输出: True
 * 解释: 1 * 1 + 2 * 2 = 5
 */
public class Test633 {

    // 相乘的两个数必须小于等于 c的开方。比如5的开方是2，大于2的就不行，3*3=9了
    public boolean judgeSquareSum(int c) {
        int i = 0;
        int j = (int) Math.sqrt(c);
        // 这里需要是 <= 号，因为要满足： 1*1 + 1*1 = 2 这一类情况
        while (i <= j) {
            int sum = i * i + j * j;
            if (sum > c) {
                j--;
            } else if (sum < c) {
                i++;
            } else {
                return true;
            }
        }
        return false;
    }
}
